<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>快速排序执行流程详解</title>
    <style>
        body {
            font-family: "Microsoft YaHei", sans-serif;
            line-height: 1.6;
            margin: 20px;
            color: #333;
        }
        .core-logic {
            border-left: 3px solid #4285f4;
            padding-left: 10px;
            margin: 10px 0 20px;
        }
        .code-block {
            background-color: #f8f9fa;
            border-radius: 4px;
            padding: 15px;
            margin: 20px 0;
            overflow-x: auto;
            border: 1px solid #e1e4e8;
        }
        .code-block pre {
            margin: 0;
            font-family: "Consolas", "Monaco", monospace;
            font-size: 0.95em;
            line-height: 1.5;
        }
        .layer {
            margin: 10px 0;
        }
        .summary {
            font-size: 1.2em;
            font-weight: bold;
            cursor: pointer;
            padding: 8px 10px;
            background-color: #f5f7fa;
            border-radius: 4px;
            border: 1px solid #e1e4e8;
        }
        .summary:hover {
            background-color: #ebf1f5;
        }
        .content {
            padding-left: 20px;
            border-left: 2px dashed #ccc;
            margin: 10px 0;
        }
        .result {
            margin: 10px 0;
            padding: 5px;
            background-color: #f0f8ff;
            border-radius: 4px;
        }
        .final-result {
            margin: 10px 0;
            padding: 8px;
            background-color: #e6f7ff;
            border-radius: 4px;
            border-left: 4px solid #2196f3;
        }
        .indent {
            padding-left: 20px;
        }
    </style>
</head>
<body>
    <h1>快速排序执行流程详解（数组 [9, 6, 4, 3, 5, 1]）</h1>
    
    <div class="core-logic">
        <strong>核心逻辑</strong>：选择基准值 → 分区（小于/等于/大于基准）→ 递归排序子数组 → 合并结果
    </div>
    
    <div class="code-block">
        <pre>def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)</pre>
    </div>
    
    <hr>
    
    <!-- 第0层 -->
    <details open class="layer">
        <summary class="summary">🔹 第 0 层（初始调用）：quick_sort([9, 6, 4, 3, 5, 1])</summary>
        <div class="content">
            <ul>
                <li>数组长度：6（>1，不满足基本情况）</li>
                <li>基准值选择：pivot = arr[3] = 3（中间索引 = 6//2 = 3）</li>
                <li>分区结果：
                    <ul class="indent">
                        <li>left = [1]（所有 &lt; 3 的元素）</li>
                        <li>middle = [3]（所有 = 3 的元素）</li>
                        <li>right = [9, 6, 4, 5]（所有 &gt; 3 的元素）</li>
                    </ul>
                </li>
                <li>递归操作：return quick_sort(left) + middle + quick_sort(right)</li>
            </ul>
            
            <!-- 第1层递归1 -->
            <details class="layer">
                <summary class="summary">🔸 第 1 层递归 1：quick_sort([1])</summary>
                <div class="content">
                    <ul>
                        <li>数组长度：1（≤1，满足基本情况）</li>
                        <li>直接返回：[1]</li>
                    </ul>
                </div>
            </details>
            
            <!-- 第1层递归2 -->
            <details class="layer">
                <summary class="summary">🔸 第 1 层递归 2：quick_sort([9, 6, 4, 5])</summary>
                <div class="content">
                    <ul>
                        <li>数组长度：4（>1，不满足基本情况）</li>
                        <li>基准值选择：pivot = arr[2] = 4（中间索引 = 4//2 = 2）</li>
                        <li>分区结果：
                            <ul class="indent">
                                <li>left = []（所有 &lt; 4 的元素）</li>
                                <li>middle = [4]（所有 = 4 的元素）</li>
                                <li>right = [9, 6, 5]（所有 &gt; 4 的元素）</li>
                            </ul>
                        </li>
                    </ul>
                    
                    <!-- 第2层递归1 -->
                    <details class="layer">
                        <summary class="summary">🔸 第 2 层递归 1：quick_sort([])</summary>
                        <div class="content">
                            <ul>
                                <li>数组长度：0（≤1，满足基本情况）</li>
                                <li>直接返回：[]</li>
                            </ul>
                        </div>
                    </details>
                    
                    <!-- 第2层递归2 -->
                    <details class="layer">
                        <summary class="summary">🔸 第 2 层递归 2：quick_sort([9, 6, 5])</summary>
                        <div class="content">
                            <ul>
                                <li>数组长度：3（>1，不满足基本情况）</li>
                                <li>基准值选择：pivot = arr[1] = 6（中间索引 = 3//2 = 1）</li>
                                <li>分区结果：
                                    <ul class="indent">
                                        <li>left = [5]（所有 &lt; 6 的元素）</li>
                                        <li>middle = [6]（所有 = 6 的元素）</li>
                                        <li>right = [9]（所有 &gt; 6 的元素）</li>
                                    </ul>
                                </li>
                            </ul>
                            
                            <!-- 第3层递归1 -->
                            <details class="layer">
                                <summary class="summary">🔸 第 3 层递归 1：quick_sort([5])</summary>
                                <div class="content">
                                    <ul>
                                        <li>数组长度：1（≤1，满足基本情况）</li>
                                        <li>直接返回：[5]</li>
                                    </ul>
                                </div>
                            </details>
                            
                            <!-- 第3层递归2 -->
                            <details class="layer">
                                <summary class="summary">🔸 第 3 层递归 2：quick_sort([9])</summary>
                                <div class="content">
                                    <ul>
                                        <li>数组长度：1（≤1，满足基本情况）</li>
                                        <li>直接返回：[9]</li>
                                    </ul>
                                </div>
                            </details>
                            
                            <div class="result">
                                <strong>第 2 层返回结果</strong>：[5] + [6] + [9] = [5, 6, 9]
                            </div>
                        </div>
                    </details>
                    
                    <div class="result">
                        <strong>第 1 层返回结果</strong>：[] + [4] + [5, 6, 9] = [4, 5, 6, 9]
                    </div>
                </div>
            </details>
            
            <div class="final-result">
                <strong>第 0 层最终结果</strong>：[1] + [3] + [4, 5, 6, 9] = [1, 3, 4, 5, 6, 9]
            </div>
        </div>
    </details>
</body>
</html>
